﻿Imports BL.BL
Imports BE.BE


Public Class frmBitacora

#Region "Métodos"


    Private Sub frmBitacora_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
        'criticidad
        Me.cbCriticidades.Items.Add("ALTA")  'alta = 0
        Me.cbCriticidades.Items.Add("MEDIA") 'media = 1
        Me.cbCriticidades.Items.Add("BAJA")  'baja = 2
        Me.cbCriticidades.SelectedIndex = 0

        With Me.dgMovimientos.ColumnHeadersDefaultCellStyle
            .Alignment = DataGridViewContentAlignment.MiddleCenter
            .BackColor = Color.Gray
            .ForeColor = Color.WhiteSmoke
        End With

        With Me.dgMovimientos
            .EnableHeadersVisualStyles = False
            .Columns.Add("c0", "id_bitacora")
            .Columns(0).DataPropertyName = "Id"
            .Columns(0).Width = 65
            .Columns(0).Visible = False
            .Columns.Add("c1", "id_usuario")
            .Columns(1).DataPropertyName = "IdUser"
            .Columns(1).Width = 65
            .Columns(1).Visible = False
            .Columns.Add("c2", "fecha")
            .Columns(2).DataPropertyName = "Fecha"
            .Columns(2).Width = 150
            .Columns(2).Visible = True
            '.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(2).DefaultCellStyle.Padding = New Padding(15, 0, 0, 0)
            .Columns.Add("c3", "usuario")
            .Columns(3).DataPropertyName = "Nick"
            .Columns(3).Width = 80
            .Columns(3).Visible = True
            .Columns(3).DefaultCellStyle.Padding = New Padding(15, 0, 0, 0)
            .Columns.Add("c4", "descripción")
            .Columns(4).DataPropertyName = "Descripcion"
            .Columns(4).Width = 350
            .Columns(4).Visible = True
            .Columns(4).DefaultCellStyle.Padding = New Padding(15, 0, 0, 0)
            .Columns.Add("c5", "criticidad")
            .Columns(5).DataPropertyName = "Criticidad"
            .Columns(5).Width = 88
            .Columns(5).Visible = True
            .Columns(5).DefaultCellStyle.Padding = New Padding(15, 0, 0, 0)
            .Columns.Add("c6", "borrado")
            .Columns(6).DataPropertyName = "Borrado"
            .Columns(6).Width = 20
            .Columns(6).Visible = False
            .Columns.Add("c7", "dvh")
            .Columns(7).DataPropertyName = "DVH"
            .Columns(7).Width = 80
            .Columns(7).Visible = False
        End With

        'cosmetica.
        Me.mcFiltrarFechaInicio.Visible = False
        Me.mcFiltrarFechaFin.Visible = False
        Me.lbFechaInicioFiltrar.Text = ""
        Me.lbFechaInicioFiltrar.Visible = False
        Me.lbFechaFinalFiltrar.Text = ""
        Me.lbFechaFinalFiltrar.Visible = False

        Me.mcDepurarFechaInicio.Visible = False
        Me.mcDepurarFechaFin.Visible = False
        Me.lbFechaInicioDepurar.Text = ""
        Me.lbFechaInicioDepurar.Visible = False
        Me.lbFechaFinalDepurar.Text = ""
        Me.lbFechaFinalDepurar.Visible = False

        Me.dgMovimientos.DataSource = Bitacora_BL.listarTodos

        'patentes del usuario logueado.
        Helper_FL.setearPermisos(frmPrincipal.usr, Me)

    End Sub


    Private Sub btnFiltrarPorRangoFechas_Click(sender As Object, e As EventArgs) Handles btnFiltrarPorRangoFechas.Click
        'cosmetica.
        Me.mcFiltrarFechaInicio.Visible = False
        Me.mcFiltrarFechaFin.Visible = False
        'validar fechas.
        If IsDate(Me.lbFechaInicioFiltrar.Text) = False Or IsDate(Me.lbFechaFinalFiltrar.Text) = False Then
            MessageBox.Show("Ingrese una Fecha válida..")
            Exit Sub
        End If
        If Date.Parse(Me.lbFechaInicioFiltrar.Text) > Date.Parse(Me.lbFechaFinalFiltrar.Text) Then
            MessageBox.Show("Eligió una Fecha Final menor a la Fecha Inicial..")
            Exit Sub
        End If
        Me.dgMovimientos.DataSource = Bitacora_BL.listarIntervalo(Me.lbFechaInicioFiltrar.Text, Me.lbFechaFinalFiltrar.Text)
    End Sub


    Private Sub btnFechaInicioFiltrar_Click(sender As Object, e As EventArgs) Handles btnFechaInicioFiltrar.Click
        'cosmetica.
        Me.gbFiltralPorUsuario.Visible = False
        Me.gbVerTodosLosMovimientos.Visible = False
        Me.gbDepurarBitacora.Visible = False
        Me.gbFiltrarPorFechas.Height = 190
        Me.mcFiltrarFechaInicio.Visible = True
    End Sub


    Private Sub btnFechaFinFiltrar_Click(sender As Object, e As EventArgs) Handles btnFechaFinFiltrar.Click
        'cosmetica.
        Me.gbFiltralPorUsuario.Visible = False
        Me.gbVerTodosLosMovimientos.Visible = False
        Me.gbFiltrarPorCriticidad.Visible = False
        Me.gbDepurarBitacora.Visible = False
        Me.gbFiltrarPorFechas.Height = 190
        Me.mcFiltrarFechaFin.Visible = True
    End Sub


    Private Sub mcFechaInicio_DateSelect(sender As Object, e As DateRangeEventArgs) Handles mcFiltrarFechaInicio.DateSelected
        Me.lbFechaInicioFiltrar.Text = mcFiltrarFechaInicio.SelectionRange.Start.ToShortDateString()
        'cosmetica.
        Me.mcFiltrarFechaInicio.Visible = False
        Me.lbFechaInicioFiltrar.Visible = True
        Me.gbFiltrarPorFechas.Height = 87
        Me.gbFiltralPorUsuario.Visible = True
        Me.gbVerTodosLosMovimientos.Visible = True
        Me.gbDepurarBitacora.Visible = True
    End Sub


    Private Sub mcfechaFin_DateSelect(sender As Object, e As DateRangeEventArgs) Handles mcFiltrarFechaFin.DateSelected
        Me.lbFechaFinalFiltrar.Text = mcFiltrarFechaFin.SelectionRange.Start.ToShortDateString()
        'cosmetica.
        Me.mcFiltrarFechaFin.Visible = False
        Me.lbFechaFinalFiltrar.Visible = True
        Me.gbFiltrarPorFechas.Height = 87
        Me.gbFiltralPorUsuario.Visible = True
        Me.gbVerTodosLosMovimientos.Visible = True
        Me.gbFiltrarPorCriticidad.Visible = True
        Me.gbVerTodosLosMovimientos.Visible = True
        Me.gbDepurarBitacora.Visible = True
    End Sub


    Private Sub btnFiltrarPorUsuario_Click(sender As Object, e As EventArgs) Handles btnFiltrarPorUsuario.Click
        'cosmetica.
        Me.mcDepurarFechaInicio.Visible = False
        Me.mcDepurarFechaFin.Visible = False
        'validar usuario.
        If Me.txtUsuario.Text = "" Then
            MessageBox.Show("Ingrese un Usuario..")
            Exit Sub
        End If
        If Usuario_BL.traerUsuario(Me.txtUsuario.Text) Is Nothing Then
            MessageBox.Show("EL Usuario no Existe..")
            Exit Sub
        End If
        Me.dgMovimientos.DataSource = Bitacora_BL.listarPorUsuario(Me.txtUsuario.Text)
    End Sub


    Private Sub txtUsuario_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtUsuario.KeyPress
        'captura tecla Enter.
        If e.KeyChar = ChrW(Keys.Enter) Then
            Call btnFiltrarPorUsuario_Click(Nothing, Nothing)
        End If
    End Sub


    Private Sub btnFiltrarPorCriticidad_Click(sender As Object, e As EventArgs) Handles btnFiltrarPorCriticidad.Click
        Me.dgMovimientos.DataSource = Bitacora_BL.listarPorCriticidad(Me.cbCriticidades.SelectedIndex)
    End Sub


    Private Sub btnFiltrarCombinado_Click(sender As Object, e As EventArgs) Handles btnFiltrarCombinado.Click
        'ál menos dos checkbox en true
        Dim cont As Integer = 0
        If Me.chbFiltrarPorFecha.Checked = True Then
            cont += 1
        End If
        If Me.chbFitrarPorUsuario.Checked = True Then
            cont += 1
        End If
        If Me.chbFiltrarPorCriticidad.Checked = True Then
            cont += 1
        End If

        If cont < 2 Then
            MessageBox.Show("Para usar el Filtro Combinado al menos dos checkbox tildados..")
            Exit Sub
        End If

        'validamos cada uno de los componentes del filro.
        Dim valido As Boolean = True
        'FECHA.
        If Me.chbFiltrarPorFecha.Checked = True Then
            'validar fechas.
            If IsDate(Me.lbFechaInicioFiltrar.Text) = False Or IsDate(Me.lbFechaFinalFiltrar.Text) = False Then
                MessageBox.Show("Ingrese una Fecha válida..")
                valido = False
            ElseIf Date.Parse(Me.lbFechaInicioFiltrar.Text) > Date.Parse(Me.lbFechaFinalFiltrar.Text) Then
                MessageBox.Show("Eligió una Fecha Final menor a la Fecha Inicial..")
                valido = False
            End If
        End If

        'NOMBRE DE USUARIO.
        If Me.chbFitrarPorUsuario.Checked = True Then
            'validar usuario.
            If Me.txtUsuario.Text = "" Then
                MessageBox.Show("Ingrese un Usuario..")
                valido = False
            ElseIf Usuario_BL.traerUsuario(Me.txtUsuario.Text) Is Nothing Then
                MessageBox.Show("EL Usuario no Existe..")
                valido = False
            End If
        End If

        'CRITICIDAD.
        If chbFiltrarPorCriticidad.Checked = True Then
            'no tiene validacion
        End If

        If valido = True Then
            'rangofechas-usuario
            If Me.chbFiltrarPorFecha.Checked = True And Me.chbFitrarPorUsuario.Checked = True And Me.chbFiltrarPorCriticidad.Checked = False Then
                Me.dgMovimientos.DataSource = Bitacora_BL.listarCombinadoRangoFechasUsuario(Me.lbFechaInicioFiltrar.Text, Me.lbFechaFinalFiltrar.Text, Me.txtUsuario.Text)
                Exit Sub
            End If

            'rangofechas-criticidad
            If Me.chbFiltrarPorFecha.Checked = True And Me.chbFiltrarPorCriticidad.Checked = True And Me.chbFitrarPorUsuario.Checked = False Then
                Me.dgMovimientos.DataSource = Bitacora_BL.listarCombinadoRangoFechasCriticidad(Me.lbFechaInicioFiltrar.Text, Me.lbFechaFinalFiltrar.Text, Me.cbCriticidades.SelectedIndex)
                Exit Sub
            End If

            'usuario-criticidad
            If Me.chbFitrarPorUsuario.Checked = True And Me.chbFiltrarPorCriticidad.Checked = True And Me.chbFiltrarPorFecha.Checked = False Then
                Me.dgMovimientos.DataSource = Bitacora_BL.listarCombinadoUsuarioCriticidad(Me.txtUsuario.Text, Me.cbCriticidades.SelectedIndex)
                Exit Sub
            End If

            'rangofechas-usuario-criticidad
            If Me.chbFiltrarPorFecha.Checked = True And Me.chbFitrarPorUsuario.Checked = True And Me.chbFiltrarPorCriticidad.Checked = True Then
                Me.dgMovimientos.DataSource = Bitacora_BL.listarCombinadoRangoFechasUsuarioCriticidad(Me.lbFechaInicioFiltrar.Text, Me.lbFechaFinalFiltrar.Text, Me.txtUsuario.Text, Me.cbCriticidades.SelectedIndex)
            End If
        End If

    End Sub


    Private Sub btnFechaInicioDepurar_Click(sender As Object, e As EventArgs) Handles btnFechaInicioDepurar.Click
        'cosmetica.
        Me.gbVerTodosLosMovimientos.Visible = False
        Me.gbDepurarBitacora.Height = 180
        Me.gbMovimientos.Visible = False
        Me.mcDepurarFechaInicio.Visible = True
    End Sub


    Private Sub btnFechaFinalDepurar_Click(sender As Object, e As EventArgs) Handles btnFechaFinalDepurar.Click
        'cosmetica.
        Me.gbVerTodosLosMovimientos.Visible = False
        Me.gbDepurarBitacora.Height = 180
        Me.gbMovimientos.Visible = False
        Me.mcDepurarFechaFin.Visible = True
    End Sub


    Private Sub mcDepurarFechaInicio_DateChanged(sender As Object, e As DateRangeEventArgs) Handles mcDepurarFechaInicio.DateChanged
        Me.lbFechaInicioDepurar.Text = mcDepurarFechaInicio.SelectionRange.Start.ToShortDateString()
        'cosmetica.
        Me.mcDepurarFechaInicio.Visible = False
        Me.gbDepurarBitacora.Height = 57
        Me.lbFechaInicioDepurar.Visible = True
        Me.gbVerTodosLosMovimientos.Visible = True
        Me.gbMovimientos.Visible = True
    End Sub


    Private Sub mcDepurarFechaFin_DateChanged(sender As Object, e As DateRangeEventArgs) Handles mcDepurarFechaFin.DateChanged
        Me.lbFechaFinalDepurar.Text = mcDepurarFechaFin.SelectionRange.Start.ToShortDateString
        'cosmetica.
        Me.mcDepurarFechaFin.Visible = False
        Me.gbDepurarBitacora.Height = 57
        Me.lbFechaFinalDepurar.Visible = True
        Me.gbVerTodosLosMovimientos.Visible = True
        Me.gbMovimientos.Visible = True
    End Sub


    Private Sub btnDepurarBitacora_Click(sender As Object, e As EventArgs) Handles btnDepurarBitacora.Click
        'validar fechas.
        If IsDate(Me.lbFechaInicioDepurar.Text) = False Or IsDate(Me.lbFechaFinalDepurar.Text) = False Then
            MessageBox.Show("Ingrese una Fecha válida..")
            Exit Sub
        End If
        If Date.Parse(Me.lbFechaInicioDepurar.Text) > Date.Parse(Me.lbFechaFinalDepurar.Text) Then
            MessageBox.Show("Eligió una Fecha Final menor a la Fecha Inicial..")
            Exit Sub
        End If
        If MsgBox("Se borrarán los registros de la Bitácora dentro del rango de fechas seleccionadas: " & Me.lbFechaInicioDepurar.Text & " - " & Me.lbFechaFinalDepurar.Text & ", Está seguro??", MsgBoxStyle.OkCancel, "Depuración de Bitácora") = MsgBoxResult.Ok Then
            Bitacora_BL.depurarBitacora(Me.lbFechaInicioDepurar.Text, Me.lbFechaFinalDepurar.Text)
        End If
        Me.dgMovimientos.DataSource = Bitacora_BL.listarTodos
    End Sub


    Private Sub btnVerTodosLosMovimientos_Click(sender As Object, e As EventArgs) Handles btnVerTodosLosMovimientos.Click
        Me.dgMovimientos.DataSource = Bitacora_BL.listarTodos
    End Sub


    Private Sub VerReporte_Click(sender As Object, e As EventArgs) Handles btnVerReporte.Click

        Dim Ds As New DataSet
        Dim Dt As New DataTable("TablaBitacora")
        Dim row As DataRow

        'add Datacolumn.
        For Each col As DataGridViewColumn In dgMovimientos.Columns
            Dim columna As New DataColumn
            columna.ColumnName = col.Name
            Dt.Columns.Add(columna)
        Next
        'iteramos el datagridview y creamos un datarow.
        For Each drow As DataGridViewRow In dgMovimientos.Rows
            'creamos una fila del tipo datarow para guardar la data que obtenemos de la grilla.
            row = Dt.NewRow
            'iteramos las columnas de la fila de la grilla.
            For i As Integer = 0 To dgMovimientos.ColumnCount - 1

                If drow.Cells(i).Value Is DBNull.Value Then  'ojo con los valores null.
                    row.Item(i) = ""
                Else
                    row.Item(i) = drow.Cells(i).Value.ToString
                End If
            Next
            Dt.Rows.Add(row)
        Next
        Ds.Tables.Add(Dt)

        frmReporteBitacora.Ds = Ds
        frmReporteBitacora.Show()

    End Sub


    Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
        Me.Close()
        Me.Dispose()
    End Sub


#End Region


#Region "Métodos auxiliares"

    Private Sub frmBitacora_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Keys.F1 Then
            Help.ShowHelp(Me, Application.StartupPath & "\ayuda_SEAS.chm", "bitacora.htm")
        End If
    End Sub

#End Region






End Class